package com.jojo.intermediate.day9_string;

import java.util.*;

/**
 * 187、重复的DNA序列
 *
 * DNA序列由一系列核苷酸组成，缩写为'A','C','G'和'T'.。
 *
 * 例如，"ACGAATTCCG"是一个 DNA序列 。
 * 在研究 DNA 时，识别 DNA 中的重复序列非常有用。
 * 给定一个表示 DNA序列 的字符串 s ，返回所有在 DNA 分子中出现不止一次的长度为10的序列(子字符串)。你可以按 任意顺序 返回答案。
 *
 * 示例 1：
 * 输入：s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
 * 输出：["AAAAACCCCC","CCCCCAAAAA"]
 *
 * 示例 2：
 * 输入：s = "AAAAAAAAAAAAA"
 * 输出：["AAAAAAAAAA"]
 */
public class RepeatDna {

    /** myCode 哈希表 */
    public List<String> findRepeatedDnaSequences(String s) {
        Set<String> tempSet = new HashSet<>();
        if (s.length() < 11){
            return new ArrayList<>();
        }
        HashSet<String> set = new HashSet<>();
        for (int i = 0;i <= s.length() - 10;i++){
            String substring = s.substring(i, i + 10);
            if(!set.add(substring)){
                tempSet.add(substring);
            }
        }
        return new ArrayList<>(tempSet);
    }

    /** pe.哈希表 + 滑动窗口 + 位运算 */

    public static void main(String[] args) {
        RepeatDna dna = new RepeatDna();
        String str = "AAAAAAAAAAA";
        List<String> repeatedDnaSequences = dna.findRepeatedDnaSequences(str);
        System.out.println(repeatedDnaSequences);
    }
}
